Все выражения AVISynth имеют вид:
|
variable_name = expression
expression
return expression
end
|
В первом случае, expression вычисляется и результат (который всегда
видео-клип) присваивается variable_name. Во втором случае expression
вычисляется и результат присваивается специальной переменной last. В
третьем случае, expression вычисляется и используется как "return
value" - возвращаемое значение скрипта, т.е. видео-клип, который увидит
приложение открывшее этот AVS файл. Четвёртый вариант эквивалентен
return last .
|
|
variable_name может быть до 50 символов длинной и содержать буквы,
цифры, знак подчёркивания (_) и никаких иных. Имя не может начинаться с цифры.
|
|
expression может принимать следующие формы.
|
variable_name
Function(args)
expression.Function(args)
expression1 + expression2
expression1 ++ expression2
|
В первом случае, значение expression есть значение ранее
установленной переменной variable_name. Во втором случае, значение есть
возвращаемое значение некой функции (которая может быть неким методом
формирующим видео-клип). Третий случай - альтернативная запись (Объектно
Ориентированный стиль), эквивалентная Function(args,
expression). Четвёртый и пятый варианты эквивалентны
UnalignedSplice(expression1,
expression2) и AlignedSplice(expression1,
expression2) соответственно
|
|
Функции в скриптовом языке AVISynth это видео-фильтры либо
методы модифицирующие (и формирующие) видео-клипы. Синтаксис вызовов показан в
описаниях фильтров и методов. Функциям может
передаваться до 60 аргументов
(этого должно хватить), и возвращаемое значение всегда видео-клип. Функции
всегда возвращают новый видео-клип, никогда не модифицирую существующий.
|
|
args - список аргументов функции разделённых запятыми. Список может
быть пустым. Любой аргумент должен быть строкой текста, целым или с плавающей
точкой числом или видео-клипом (это expression). Если функция ожидает
видео-клип, как последний аргумент, и этот аргумент не указан, тогда в качестве
опущенного аргумента используется специальная переменная last
|
|
Фильтры AVISynth могут принимать именованные аргументы.
Именованные аргументы могут быть записаны в любом порядке и фильтр выберет
значения по умолчанию для тех, что вы пропустите. В результате некоторые фильтры
делаются значительно более лёгкими в применении. К примеру, вы можете теперь
писать Subtitle("Hello, World!", text_color=$00FF00, x=100, y=200)
вместо Subtitle("Hello, World!", 100, 200, 0, 999999, "Arial", 24, $00FF00) .
|
|
Вызовы функций можно записывать без скобок, например
FilterName arg1, arg2 .
Основной резон для этого - сохранение совместимости со старыми скриптами.
Однако, иногда удобно не использовать скобки, когда нет возможности
возникновения путаницы
|
|
Строка текста окружается либо "символами цитирования" либо ``в стиле
TeX''. Строка текста может содержать любые символы кроме завершения,
символа цитирования или двойных апострофов. Если вам надо использовать символ
цитирования в строке, применяйте запись в стиле TeX. Как
альтернативу, для преодоления данного ограничения можно использовать фигурные
символы цитирования из Windows расширения ASCII таблицы
|
|
Целое число - строка цифр, с необязательным + или - в начале. Число с
плавающей точкой - строка цифр с точкой где-то внутри и необязательным + или -.
К примеру +1. воспринимается как число с плавающей точкой.
|
|
Также можно использовать шестнадцатеричные
числа с префиксом $. Такие числа
рассматриваются как целые. К примеру $FF8800 - оттенок оранжевого. Это
тоже самое, что и запись используемая в HTML, за исключением того, что в
HTML используется префикс #, а не $.
|
|
Любое выражение AVISynth должно занимать одну строку.
Размещение более одного выражения в строке или разделение одного выражения на
несколько строк не поддерживается.
|
|
AVISynth игнорирует любой текст следующий после символа # и
до конца строки. Этот символ может быть использован для добавления в скрипт
комментариев.
|
|
AVISynth игнорирует регистр: aViSouRCe
применим также, как и AVISource .
|
|
Вы можете получить свойства клипа в AVS скрипте. К примеру,
если переменная clip содержит видео-клип, то clip.height
его высота, clip.framecount длина в кадрах и т.д. Вы можете
работать с этими значениями используя все обычные арифметические и логические
операторы (из C), и выполнять условный код с оператором ?:
(к примеру clip = clip.IsRGB?clip.Subtitle("RGB"):clip.Subtitle("Not RGB") ).
Полный список свойств таков: width , height ,
framecount , framerate , audiorate ,
audiolength , audiochannels , audiobits ,
IsRGB , IsYUY2 , IsFieldBased ,
IsFrameBased .
|
|
Вспомогательные системные функции: floor(f) , ceil(f) ,
round(f) (преобразование числа с плавающей точкой в целое);
IsBool(var) , IsInt(var) , IsFloat(var) ,
IsString(var) , IsClip(var) , Defined(var)
(предикаты); Default(x,d) (возвращает x если Defined(x), в противном
случае d); Eval(string) и Apply(func-string,arg,...) ,
(Eval("f(x)") эквивалентно f(x) и
Apply("f", x) ); Import(filename) (вычисляет содержимое файла);
Assert(bool-expr,error-message) для вывода сообщения об ошибке.
|
|
Вы можете определить и вызывать свои собственные функции в AVS скрипте,
например так:
|
function NTSC2PAL(clip c) {
# Довольно хорошее преобразование NTSC->PAL. Была бы лучше с Smart Bob. :-)
Assert(c.height == 480, "NTSC2PAL: input clip must have 480 scan lines")
Bob(c, height=576)
ChangeFPS(50)
SeparateFields().SelectEvery(4,0,3)
return Weave()
}
AVISource("ntsc.avi").NTSC2PAL()
|
|